<?php
/**
 * 百度ECharts配置数据生成类库
 * @author hunter <784337144@qq.com>
 */

require_once str_replace('\\', '/', __DIR__).'/Series.php';
require_once str_replace('\\', '/', __DIR__).'/Axis.php';
require_once str_replace('\\', '/', __DIR__).'/DateTimeRange.php';

class EChart{
	
	protected $chart = array();
	
	public function __construct() {
		$this->chart['series'] = array();
		$this->chart['callbacks'] = array();
	}
	
	/**
	 * 绘制标题，详情请查阅echarts使用文档
	 * 
	 * @param array|string  $title    主标题，可以是字符串或者数组 如：array('text' => '', 'link' => '', 'target' => '');
	 * @param array|string  $subtitle 子标题，可以是字符串或者数组 如：array('text' => '', 'link' => '', 'target' => '');
	 * @param string|number $x        水平安放位置，默认为左侧，可选为：'center' | 'left' | 'right' | {number}（x坐标，单位px）
	 * @param string|number $y        垂直安放位置，默认为全图顶端，可选为：'top' | 'bottom' | 'center' | {number}（y坐标，单位px）
	 * @param boolean       $show     显示策略，可选为：true（显示） | false（隐藏）
	 * @param array         $style    样式设置 可选项有：
	 *                                 textAlign, 水平对齐方式，默认根据x设置自动调整，可选为： left' | 'right' | 'center
	 *                                 backgroundColor, rgba(0,0,0,0) 标题背景颜色，默认透明
	 *                                 borderColor, 标题边框颜色
	 *                                 borderWidth, 标题边框线宽，单位px，默认为0（无边框）
	 *                                 padding, 标题内边距，单位px，默认各方向内边距为5，接受数组分别设定上右下左边距，同css，见下图
	 *                                 itemGap, 主副标题纵向间隔，单位px，默认为10
	 *                                 textStyle, 主标题文本样式 数组格式 例：array('fontSize' => 18, 'fontWeight' => 'bolder', 'color' =>  '#333')
	 *                                 subtextStyle， 副标题文本样式 例：同上
	 * @return array
	 */
	public function drawTitle($title, $subtitle = array(), $x = 'left', $y = 'top', $show = true, $style = array()){
		$titleArr = array();
		//主标题
		if(!$title){
			return $titleArr;
		}
		if(is_array($title)){
			if(isset($title['text']) && $title['text']){
				$titleArr['text'] = $title['text'];
				if(isset($title['link'])){
					$titleArr['link'] = $title['link'];
				}
				if(isset($title['target'])){
					$titleArr['target'] = '';
				}
			}else{
				return $titleArr;
			}
		}else{
			$titleArr['text'] = $title;
		}
		//副标题
		if($subtitle){
			if(is_array($subtitle)){
				if(isset($subtitle['text']) && $subtitle['text']){
					$titleArr['subtext'] = $subtitle['text'];
					if(isset($subtitle['link'])){
						$titleArr['sublink'] = $subtitle['link'];
					}
					if(isset($subtitle['target'])){
						$titleArr['subtarget'] = '';
					}
				}
			}else{
				$titleArr['subtext'] = $subtitle;
			}
		}
		//位置
		$titleArr['x'] = $x;
		$titleArr['y'] = $y;
		//显示
		$titleArr['show'] = $show;
		//样式设置
		if($style && is_array($style)){
			$styleItems = array('textAlign', 'backgroundColor', 'borderColor', 'borderWidth', 'padding', 'itemGap', 'textStyle', 'subtextStyle');
			foreach ($styleItems as $item){
				if(isset($style[$item])){
					$titleArr[$item] = $style[$item];
				}
			}
		}
		$this->chart['title'] = $titleArr;
		return $this;
	}
	
	/**
	 * 绘制工具栏，详情请查阅echarts使用文档
	 * 
	 * @param array         $feature  启用功能 所有可选项均为关联数组类型，具体请参照ehcarts手册，可选项有：
	 *                                 mark, 辅助线标志
	 *                                 dataZoom, 框选区域缩放，自动与存在的dataZoom控件同步
	 *                                 dataView, 数据视图
	 *                                 magicType, 动态类型切换，支持直角系下的折线图、柱状图、堆积、平铺转换
	 *                                 restore, 还原，复位原始图表
	 *                                 saveAsImage, 保存图片（IE8-不支持）
	 * @param string        $orient   布局方式，默认为水平布局，可选为：'horizontal' | 'vertical'
	 * @param string|number $x        水平安放位置，默认为全图居中，可选为：'center' | 'left' | 'right' | {number}（x坐标，单位px）
	 * @param string|number $y        垂直安放位置，默认为全图顶端，可选为：'top' | 'bottom' | 'center' | {number}（y坐标，单位px）
	 * @param boolean       $show     显示策略，可选为：true（显示） | false（隐藏）
	 * @param array         $style    样式设置 可选项有：
	 *                                 backgroundColor, 工具箱背景颜色，默认透明 rgba(0,0,0,0)
	 *                                 borderColor, 工具箱边框颜色
	 *                                 borderWidth, 工具箱边框线宽，单位px，默认为0（无边框）
	 *                                 padding, 工具箱内边距，单位px，默认各方向内边距为5，接受数组分别设定上右下左边距，同css，见下图
	 *                                 itemGap, 各个item之间的间隔，单位px，默认为10，横向布局时为水平间隔，纵向布局时为纵向间隔，见下图
	 *                                 itemSize, 工具箱icon大小，单位（px）
	 *                                 color, 工具箱icon颜色序列，循环使用，同时支持在具体feature内指定color array('#1e90ff','#22bb22','#4b0082','#d2691e')
	 *                                 disableColor， 禁用颜色定义
	 *                                 effectiveColor， 生效颜色定义
	 *                                 showTitle， 是否显示工具箱文字提示，默认启用
	 *                                 textStyle， 工具箱提示文字样式
	 * @return array
	 */
	public function drawToolbox($feature, $orient = 'horizontal', $x = 'center', $y = 'top', $show = true, $style = array()){
		$toolboxArr = array();
		$toolboxArr['feature'] = $feature;
		$toolboxArr['orient'] = $orient;
		$toolboxArr['x'] = $x;
		$toolboxArr['y'] = $y;
		$toolboxArr['show'] = $show;
		//样式设置
		if($style && is_array($style)){
			$styleItems = array('backgroundColor', 'borderColor', 'borderWidth', 'padding', 'itemGap', 'itemSize', 'color', 'disableColor', 'effectiveColor', 'showTitle', 'textStyle');
			foreach ($styleItems as $item){
				if(isset($style[$item])){
					$toolboxArr[$item] = $style[$item];
				}
			}
		}
		$this->chart['toolbox'] = $toolboxArr;
		return $this;
	}
	
	/**
	 * 提示框，鼠标悬浮交互时的信息提示。
	 * 
	 * @param string        $formatter    内容格式器：{string}（Template） | {Function}，支持异步回调，具体见百度文档：http://echarts.baidu.com/doc/doc.html#Tooltip
	 * @param string        $trigger      触发类型，默认数据触发，可选为：'item' | 'axis'
	 * @param string|number $position     位置指定，传入{Array}，如[x, y]， 固定位置[x, y]；
	 *                                     传入{Function}，如function([x, y]) {return [newX,newY]}，默认显示坐标为输入参数，用户指定的新坐标为输出返回。
	 * @param boolean       $show         显示策略，可选为：true（显示） | false（隐藏）
	 * @param boolean       $showContent  tooltip主体内容显示策略，只需tooltip触发事件或显示axisPointer而不需要显示内容时可配置该项为false，可选为：true（显示） | false（隐藏）
	 * @param array         $animation    动画设置 可选项有：
	 *                                     showDelay, 显示延迟，添加显示延迟可以避免频繁切换，特别是在详情内容需要异步获取的场景，单位ms 默认：20
	 *                                     hideDelay, 隐藏延迟，单位ms，默认：100
	 *                                     transitionDuration, 动画变换时长，单位s，如果你希望tooltip的跟随实时响应，showDelay设置为0是关键，同时transitionDuration设0也会有交互体验上的差别。默认：0.4
	 *                                     enterable, 鼠标是否可进入详情气泡中，默认为false，如需详情内交互，如添加链接，按钮，可设置为true。
	 * @param array         $style        样式设置 可选项有：
	 *                                     backgroundColor, 提示背景颜色，默认为透明度为0.7的黑色 rgba(0,0,0,0.7)
	 *                                     borderColor, 提示边框颜色 #333
	 *                                     borderRadius, 提示边框圆角，单位px，默认为4
	 *                                     borderWidth, 提示边框线宽，单位px，默认为0（无边框）
	 *                                     padding, 提示内边距，单位px，默认各方向内边距为5，接受数组分别设定上右下左边距，同css
	 *                                     axisPointer, array(), 坐标轴指示器，默认type为line，可选为：'line' | 'cross' | 'shadow' | 'none'(无)，指定type后对应style生效
	 *                                     textStyle, 文本样式，默认为白色字体
	 * @return array
	 */
	public function drawTooltip($formatter, $trigger, $position = '', $show = true, $showContent = true, $animation = array(), $style = array()){
		$tooltipArr = array();
		$tooltipArr['formatter'] = $formatter;
		$tooltipArr['trigger'] = $trigger;
		if($position){
			$tooltipArr['position'] = $position;
		}
		$tooltipArr['show'] = $show;
		$tooltipArr['showContent'] = $showContent;
		if($animation && is_array($animation)){
			$animationItems = array('showDelay', 'hideDelay', 'transitionDuration', 'enterable');
			foreach ($animationItems as $item){
				if(isset($animation[$item])){
					$tooltipArr[$item] = $animation[$item];
				}
			}
		}
		if($style && is_array($style)){
			$styleItems = array('backgroundColor', 'borderColor', 'borderRadius', 'borderWidth', 'padding', 'axisPointer', 'textStyle');
			foreach ($styleItems as $item){
				if(isset($style[$item])){
					$tooltipArr[$item] = $style[$item];
				}
			}
		}
		$this->chart['tooltip'] = $tooltipArr;
		return $this;
	}
	
	/**
	 * 图例，每个图表最多仅有一个图例
	 * 
	 * @param array         $data         图例内容数组，数组项通常为{string}，每一项代表一个系列的name，默认布局到达边缘会自动分行（列），传入空字符串''可实现手动分行（列）。
	 *                                     使用根据该值索引series中同名系列所用的图表类型和itemStyle，如果索引不到，该item将默认为没启用状态。 
     *                                     如需个性化图例文字样式，可把数组项改为{Object}，指定文本样式和个性化图例icon，格式为 
     *                                     {
     *                                       name : {string}, 
     *                                       textStyle : {Object}, 
     *                                       icon : {string}
     *                                     }
	 * @param string        $orient       布局方式，默认为水平布局，可选为：'horizontal' | 'vertical' 默认 horizontal
	 * @param string|number $x            水平安放位置，默认为全图居中，可选为：'center' | 'left' | 'right' | {number}（x坐标，单位px）
	 * @param string|number $y            垂直安放位置，默认为全图顶端，可选为：'top' | 'bottom' | 'center' | {number}（y坐标，单位px）
	 * @param string|function $formatter  文本格式器：{string}（Template） | {Function}，模板变量为'{name}'，函数回调参数为name
	 *                                     传入{Function}，如function([x, y]) {return [newX,newY]}，默认显示坐标为输入参数，用户指定的新坐标为输出返回。
	 * @param boolean       $show         显示策略，可选为：true（显示） | false（隐藏）
	 * @param boolean       $selectedMode 选择模式，默认开启图例开关，可选single，multiple
	 * @param array         $selected     配置默认选中状态，可配合LEGEND.SELECTED事件做动态数据载入
	 * @param array         $style        样式设置 可选项有：
	 *                                     backgroundColor, 图例背景颜色，默认透明 rgba(0,0,0,0)
	 *                                     borderColor, 图例边框颜色 默认 "#ccc"
	 *                                     borderWidth, 图例边框线宽，单位px，默认为0（无边框）
	 *                                     padding, 图例内边距，单位px，默认各方向内边距为5，接受数组分别设定上右下左边距
	 *                                     itemGap, 各个item之间的间隔，单位px，默认为10，横向布局时为水平间隔，纵向布局时为纵向间隔 默认10
	 *                                     itemWidth, 图例图形宽度 20
	 *                                     itemHeight, 图例图形高度 14
	 *                                     textStyle, 默认只设定了图例文字颜色，更个性化的是，要指定文字颜色跟随图例，可设color为'auto' 默认 {color: '#333'}
	 * @return array
	 */
	public function drawLegend($data, $orient = 'horizontal', $x = 'center', $y = 'top', $formatter = '', $show = true, $selectedMode = true, $selected = array(), $style = array()){
		$legendArr = array();
		$legendArr['data'] = $data;
		$legendArr['orient'] = $orient;
		$legendArr['x'] = $x;
		$legendArr['y'] = $y;
		if($formatter){
			$legendArr['formatter'] = $formatter;
		}
		$legendArr['show'] = $show;
		$legendArr['selectedMode'] = $selectedMode;
		if($selected){
			$legendArr['selected'] = $selected;
		}
		if($style && is_array($style)){
			$styleItems = array('backgroundColor', 'borderColor', 'borderWidth', 'padding', 'itemGap', 'itemWidth', 'itemHeight', 'textStyle');
			foreach ($styleItems as $item){
				if(isset($style[$item])){
					$legendArr[$item] = $style[$item];
				}
			}
		}
		$this->chart['legend'] = $legendArr;
		return $this;
	}
	
	/**
	 * 值域选择，每个图表最多仅有一个值域控件
	 * 
	 * @param array         $data         值域配置数据，可选项有
     *                                     min 指定的最小值，eg: 0，默认无，必须参数，唯有指定了splitList时可缺省min。
     *                                     max 指定的最大值，eg: 100，默认无，必须参数，唯有指定了splitList时可缺省max
     *                                     precision 小数精度，默认为0，无小数点，当 min ~ max 间在当前精度下无法整除splitNumber份时，精度会自动提高以满足均分，不支持不等划分
     *                                     splitNumber 分割段数，默认为5，为0时为线性渐变，calculable为true是默认均分100份
     *                                     splitList 自定义分割方式，支持不等距分割。splitList被指定时，splitNumber将被忽略。
     *                                               是一个（不可为空的）Array，Array的每一项为一个Object，含有如下属性：
     *                                               { 
     *                                                 start: 10     本项的数据范围起点（>=），如果不设置表示负无穷。
     *                                                 end: 30     本项的数据范围终点（<=），如果不设置表示正无穷。
     *                                                     如果想本项只对应一个值，那么start和end设同样的数就可以了。
     *                                                 label: '10 to 30'     本项的显示标签，缺省则自动生成label 
     *                                                 color: '#333'     本项的颜色，缺省则自动计算color 
     *                                               } 
	 *                                     range 用于设置dataRange的初始选中范围。calculable为true时有效。其值型如：{start: 10, end: 50}。
	 * @param string        $orient       布局方式，默认为垂直布局，可选为：'horizontal' | 'vertical' 默认 vertical
	 * @param string|number $x            水平安放位置，默认为全图居中，可选为：'center' | 'left' | 'right' | {number}（x坐标，单位px）
	 * @param string|number $y            垂直安放位置，默认为全图顶端，可选为：'top' | 'bottom' | 'center' | {number}（y坐标，单位px）
	 * @param string|fun    $formatter    内容格式器：{string}（Template） | {Function}，模板变量为'{value}'和'{value2}'，代表数值起始值和结束值，函数参数两个，含义同模板变量，当calculable为true时模板变量仅有'{value}'
	 * @param boolean       $show         显示策略，可选为：true（显示） | false（隐藏）
	 * @param boolean       $selectedMode 选择模式，默认开启图例开关，可选single，multiple
	 * @param boolean       $calculable   是否启用值域漫游，启用后无视splitNumber和splitList，值域显示为线性渐变 默认false
	 * @param boolean       $hoverLink    是否启用地图hover时的联动响应（详情披露） 默认true
	 * @param boolean       $realtime     值域漫游是否实时显示，在不支持Canvas的浏览器中该值自动强制置为false。默认true
	 * @param array         $text         值域文字显示，splitNumber生效时默认以计算所得数值作为值域文字显示，可指定长度为2的文本数组显示简介的值域文本，如['高', '低']，'\n'指定换行
	 * @param array         $style        样式设置 可选项有：
	 *                                     backgroundColor, 值域控件背景颜色，默认透明 rgba(0,0,0,0)
	 *                                     borderColor, 值域控件边框颜色 默认 "#ccc"
	 *                                     borderWidth, 值域控件边框线宽，单位px，默认为0（无边框）
	 *                                     padding, 值域控件内边距，单位px，默认各方向内边距为5，接受数组分别设定上右下左边距
	 *                                     itemGap, 各个item之间的间隔，单位px，默认为10，横向布局时为水平间隔，纵向布局时为纵向间隔， 默认10
	 *                                     itemWidth, 值域控件图形宽度 20
	 *                                     itemHeight, 值域控件图形高度 14
	 *                                     color, ['#1e90ff','#f0ffff'] 值域颜色标识，颜色数组长度必须>=2，颜色代表从数值高到低的变化，即颜色数组低位代表数值高的颜色标识 ，支持Alpha通道上的变化（rgba）
	 *                                     textStyle, 默认只设定了值域控件文字颜色 默认 {color: '#333'}
	 * @return array
	 */
	public function drawDataRange($data, $orient = 'vertical', $x = 'center', $y = 'top', $formatter = '', $show = true, $selectedMode = true, $calculable = false, $hoverLink = true, $realtime = true, $text = array(), $style = array()){
		$dataRangeArr = array();
		if(!$style || is_array($data)){
			return '';
		}
		$dataItems = array('min', 'max', 'precision', 'splitNumber', 'splitList', 'range');
		foreach ($dataItems as $item){
			if(isset($data[$item])){
				$dataRangeArr[$item] = $data[$item];
			}
		}
		$dataRangeArr['orient'] = $orient;
		$dataRangeArr['x'] = $x;
		$dataRangeArr['y'] = $y;
		if($formatter){
			$dataRangeArr['formatter'] = $formatter;
		}
		$dataRangeArr['show'] = $show;
		$dataRangeArr['selectedMode'] = $selectedMode;
		$dataRangeArr['calculable'] = $calculable;
		$dataRangeArr['hoverLink'] = $hoverLink;
		$dataRangeArr['realtime'] = $realtime;
		if($text && is_array($text)){
			$dataRangeArr['text'] = $text;
		}
		if($style && is_array($style)){
			$styleItems = array('backgroundColor', 'borderColor', 'borderWidth', 'padding', 'itemGap', 'itemWidth', 'itemHeight', 'color', 'textStyle');
			foreach ($styleItems as $item){
				if(isset($style[$item])){
					$dataRangeArr[$item] = $style[$item];
				}
			}
		}
		$this->chart['dataRange'] = $dataRangeArr;
		return $this;
	}
	
	/**
	 * 数据区域缩放。与toolbox.feature.dataZoom同步，仅对直角坐标系图表有效。
	 * 
	 * @param string        $orient       布局方式，默认为水平布局，可选为：'horizontal' | 'vertical'
	 * @param number        $x            水平安放位置，默认为根据grid参数适配，纵向布局默认左侧，可指定 {number}（左上角x坐标，单位px）
	 * @param number        $y            垂直安放位置，默认为根据grid参数适配，纵向布局默认下方，可指定 {number}（左上角y坐标，单位px）
	 * @param number        $width        指定宽度，横向布局时默认为根据grid参数适配，纵向布局是默认为30，可指定 {number}（宽度，单位px）
	 * @param number        $height       指定高度，纵向布局时默认为根据grid参数适配，横向布局是默认为30，可指定 {number}（高度，单位px）
	 * @param number        $start        数据缩放，选择起始比例，默认为0（%），从首个数据起选择。
	 * @param number        $end          数据缩放，选择结束比例，默认为100（%），到最后一个数据选择结束。
	 * @param boolean       $show         显示策略，可选为：true（显示） | false（隐藏）
	 * @param boolean       $showDetail   缩放变化是否显示定位详情。true
	 * @param boolean       $realtime     缩放变化是否实时显示，在不支持Canvas的浏览器中该值自动强制置为false。false
	 * @param boolean       $zoomLock     数据缩放锁，默认为false，当设置为true时选择区域不能伸缩，即(end - start)值保持不变，仅能做数据漫游。
	 * @param array|number  $xAxisIndex   当不指定时默认控制所有横向类目，可通过数组指定多个需要控制的横向类目坐标轴Index，仅一个时可直接为数字
	 * @param array|number  $yAxisIndex   当不指定时默认控制所有横向类目，可通过数组指定多个需要控制的横向类目坐标轴Index，仅一个时可直接为数字
	 * @param array         $style        样式设置 可选项有：
	 *                                     backgroundColor, 背景颜色，默认透明 rgba(0,0,0,0)
	 *                                     dataBackgroundColor, 数据缩略背景颜色，仅以第一个系列的数据作为缩量图显示 默认 '#eee'
	 *                                     fillerColor, 选择区域填充颜色 'rgba(144,197,237,0.2)'
	 *                                     handleColor, 控制手柄颜色 'rgba(70,130,180,0.8)'	
	 *                                     handleSize, 控制手柄大小
	 * @return array
	 */
	public function drawDataZoom($orient = 'horizontal', $x = '', $y = '', $width = '', $height = '', $start = '', $end = '', $show = true, $showDetail = true, $realtime = false, $zoomLock = false, $xAxisIndex = '', $yAxisIndex = '', $style = array()){
		$dataZoomArr = array();
		$dataZoomArr['orient'] = $orient;
		if($x !== ''){
			$dataZoomArr['x'] = $x;
		}
		if($y !== ''){
			$dataZoomArr['y'] = $y;
		}
		if($width !== ''){
			$dataZoomArr['width'] = $width;
		}
		if($height !== ''){
			$dataZoomArr['height'] = $height;
		}
		if($start !== ''){
			$dataZoomArr['start'] = $start;
		}
		if($end !== ''){
			$dataZoomArr['end'] = $end;
		}
		$dataZoomArr['show'] = $show;
		$dataZoomArr['selectedMode'] = $showDetail;
		$dataZoomArr['realtime'] = $realtime;
		$dataZoomArr['zoomLock'] = $zoomLock;
		if($xAxisIndex){
			$dataZoomArr['xAxisIndex'] = $xAxisIndex;
		}
		if($yAxisIndex){
			$dataZoomArr['yAxisIndex'] = $yAxisIndex;
		}
		if($style && is_array($style)){
			$styleItems = array('backgroundColor', 'dataBackgroundColor', 'fillerColor', 'handleColor', 'handleSize');
			foreach ($styleItems as $item){
				if(isset($style[$item])){
					$dataZoomArr[$item] = $style[$item];
				}
			}
		}
		$this->chart['dataZoom'] = $dataZoomArr;
		return $this;
	}
	
	/**
	 * 直角坐标系内绘图网格
	 * 
	 * @param string|number $x            直角坐标系内绘图网格左上角横坐标，数值单位px，支持百分比（字符串），如'50%'(显示区域横向中心)
	 * @param string|number $y            直角坐标系内绘图网格左上角纵坐标，数值单位px，支持百分比（字符串），如'50%'(显示区域纵向中心)
	 * @param string|number $x2           直角坐标系内绘图网格右下角横坐标，数值单位px，支持百分比（字符串），如'50%'(显示区域横向中心)
	 * @param string|number $y2           直角坐标系内绘图网格右下角纵坐标，数值单位px，支持百分比（字符串），如'50%'(显示区域纵向中心)
	 * @param string|number $x2           直角坐标系内绘图网格右下角横坐标，数值单位px，支持百分比（字符串），如'50%'(显示区域横向中心)
	 * @param string|number $y2           直角坐标系内绘图网格右下角纵坐标，数值单位px，支持百分比（字符串），如'50%'(显示区域纵向中心)
	 * @param boolean       $show         显示策略，可选为：true（显示） | false（隐藏）
	 * @param boolean       $selectedMode 选择模式，默认开启图例开关，可选single，multiple
	 * @param array         $selected     配置默认选中状态，可配合LEGEND.SELECTED事件做动态数据载入
	 * @param array         $style        样式设置 可选项有：
	 *                                     backgroundColor, 图例背景颜色，默认透明 rgba(0,0,0,0)
	 *                                     borderColor, 图例边框颜色 默认 "#ccc"
	 *                                     borderWidth, 图例边框线宽，单位px，默认为0（无边框）
	 *                                     padding, 图例内边距，单位px，默认各方向内边距为5，接受数组分别设定上右下左边距
	 *                                     itemGap, 各个item之间的间隔，单位px，默认为10，横向布局时为水平间隔，纵向布局时为纵向间隔 默认10
	 *                                     itemWidth, 图例图形宽度 20
	 *                                     itemHeight, 图例图形高度 14
	 *                                     textStyle, 默认只设定了图例文字颜色，更个性化的是，要指定文字颜色跟随图例，可设color为'auto' 默认 {color: '#333'}
	 * @return array
	 */
	public function drawGrid($x = '80', $y = '60', $x2 = '80', $y2 = '60', $width = '', $height = '', $backgroundColor = '', $borderWidth = 1, $borderColor = '#ccc'){
		$gridArr = array();
		$gridArr['x'] = $x;
		$gridArr['y'] = $y;
		$gridArr['x2'] = $x2;
		$gridArr['y2'] = $y2;
		if($width){
			$gridArr['width'] = $width;
		}
		if($height){
			$gridArr['height'] = $height;
		}
		if($backgroundColor){
			$gridArr['backgroundColor'] = $backgroundColor;
		}
		$gridArr['borderWidth'] = $borderWidth;
		$gridArr['borderColor'] = $borderColor;
		$this->chart['grid'] = $gridArr;
		return $this;
	}

	/**
	 * 直角坐标系中横轴数组，数组中每一项代表一条横轴坐标轴，仅有一条时可省略数组。
	 * 最多同时存在2条横轴，单条横轴时可指定安放于grid的底部（默认）或顶部，
	 * 2条同时存在时位置互斥，默认第一条安放于底部，第二条安放于顶部。
	 * 
	 * @param array        $axis         坐标轴，$this->axis()返回的结果
	 * @param array        $axis2        坐标轴2，默认为空，$this->axis()返回的结果
	 * @return array
	 */
	public function drawXAxis($axis, $axis2 = array()){
		$xAxisArr = array();
		if(!$axis2){
			$xAxisArr = $axis;
		}else{
			$xAxisArr = array($axis, $axis2);
		}
		$this->chart['xAxis'] = $xAxisArr;
		return $this;
	}
	
	/**
	 * 直角坐标系中纵轴数组，数组中每一项代表一条纵轴坐标轴，仅有一条时可省略数组。
	 * 最多同时存在2条纵轴，单条纵轴时可指定安放于grid的左侧（默认）或右侧，
	 * 2条同时存在时位置互斥，默认第一条安放于左侧，第二条安放于右侧。
	 * 
	 * @param array        $axis         坐标轴，$this->axis()返回的结果
	 * @param array        $axis2        坐标轴2，默认为空，$this->axis()返回的结果
	 * @return array
	 */
	public function drawYAxis($axis, $axis2 = array()){
		$yAxisArr = array();
		if(!$axis2){
			$yAxisArr = $axis;
		}else{
			$yAxisArr = array($axis, $axis2);
		}
		$this->chart['yAxis'] = $yAxisArr;
		return $this;
	}
		
	/**
	 * 添加系列到当前图标
	 * 
	 * @param array       $series        数据系列： 
	 * @return array
	 */
	public function addSeries($series){
		$this->chart['series'][] = $series;
		return $this;
	}
	
	/**
	 * 添加回调函数，为了解决json中存储回调函数问题，指定回调函数在对象中的位置即可，
	 * 客户端解析时通过位置查找到配置项通过eval()方法执行回调
	 * @param string $position 回调函数位置，使用'.'号分割
	 * @return string
	 */
	public function addCallback($position){
		$this->chart['callbacks'][] = $position;
		return $this;
	}
	
	/**
	 * 获取配置数据 以数组形式返回
	 * 
	 * @return array
	 */
	public function getAsArray(){
		return $this->chart;
	}
	
	/**
	 * 获取配置数据 以json格式返回
	 * 
	 * @return string
	 */
	public function getAsJson(){
		return json_encode($this->chart,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
	}
}